在使用 Scripting 提供的 Health 模块访问 iOS 健康数据时,开发者需要了解 iOS HealthKit 特有的授权机制,以及 Scripting API 的行为设计。本说明文档将帮助你正确处理无权限时的情况,并提供开发建议。
无法主动查询授权状态 iOS 不提供 API 用于判断某个健康数据类型是否已授权或被拒绝。授权状态不可直接获知。
授权弹窗仅在首次请求时弹出
系统只会在数据类型的授权状态为 notDetermined
时自动弹出授权弹窗。一旦用户做出决定(允许或拒绝),后续请求不会再次触发弹窗。
无权限不会返回系统错误
如果请求了未被授权的数据,HealthKit 不会抛出错误。部分接口会返回空数据,部分接口则通过 Promise.reject
报错。
当你调用任意需要健康数据权限的方法时,Scripting 会根据接口涉及的数据类型,自动触发系统授权弹窗(如果该类型尚未请求过权限)。
例如:
方法 | 无权限时行为 | 是否触发 Promise.reject |
---|---|---|
Health.queryQuantitySamples() |
返回空数组 [] |
否 |
Health.queryCategorySamples() |
返回空数组 [] |
否 |
Health.dateOfBirth() |
无返回值 | 是 |
Health.bloodType() 等档案方法 |
无返回值 | 是 |
当你同时调用多个需要健康权限的方法(例如通过 Promise.all()
),Scripting 会自动合并这些接口所需的权限,并在同一个系统弹窗中请求授权。这样可以避免多次弹窗打断用户体验。
场景 | 建议处理方式 |
---|---|
首次请求健康数据 | 在 UI 中预告权限用途,引导用户理解授权目的 |
接口返回空数组 | 判断数据长度,提示“可能未授权或无数据记录” |
接口发生异常(如 dateOfBirth ) |
使用 try...catch 捕获异常并提示用户手动检查权限 |
前往「健康」App,依次打开「数据访问与设备 > Scripting」,确认是否已授予相关权限。